Typescript | 您所在的位置:网站首页 › typescript any unknown › Typescript |
Você precisa criar um pacote ou uma função isolada que filtre todas as datas com determinado formato. No entanto, você não sabe a estrutura da coleção. Considere os seguintes dados: const data = [ { name: '1990–01-xx' }, { name: '1990–01–01' } ]E uma validação de data yyyy-mm-dd const VALIDATE_DATE_REGEXP = new RegExp('\\d{4,4}\\-\\d{2,2}\\-\\d{2,2}', 'g')Se você não está muito familiarizado com tipos genéricos, pode enfrentar dois problemas (ou mais): 1 — Uso do unknown Este é um péssimo caso, pois não fornecerá sugestões e não permitirá que você compile o código, pois não sabe se e quando o erro ocorrerá. 2 — Uso do any export const my_package_function = (data: any, accessorKey: string) => { return data.filter((item: any) => VALIDATE_DATE_REGEXP.test(item[accessorKey])) }Este código não fornecerá erros de tipagem, mas o resultado também será do tipo “any”, e você precisará tipar a variável em vez do retorno da função, o que é ruim. Se você passar um argumento que não seja um array, verá que o código irá quebrar. Solução: const my_package_function = (data: T[], accessorKey: keyof T) => { return data.filter((item) => VALIDATE_DATE_REGEXP.test(item[accessorKey])) }Note que agora é diferente. O “T” (pode ser outra coisa, mas é comum ser usado para coleções e dados dinâmicos) irá referenciar o que você irá usar. Isso fará com que o “data” entenda que é um array daquela tipagem e que o “accessorKey” não seja apenas uma string qualquer, mas sim uma das chaves do objeto. O código completo ficaria assim e já terá a tipagem correta. A tipagem será exibida sem a necessidade de criar uma interface. A tipagem vai aparecer sem você criar uma interface fontes: https://www.typescriptlang.org/docs/handbook/type-inference.html |
CopyRight 2018-2019 实验室设备网 版权所有 |